<?php
    class TUtils
    {
        /**
         * Função para montar um DropDownList de operadores
         * @param <type> $valorselecionado
         */
        public static function MontaDropDownListOperador($valorselecionado=null)
        {
            #if(!empty ($valorselecionado) && $valorselecionado == "0")
            #{ echo "<option value=\"0\" selected> - </option>"; }
            #else
            #{ echo "<option value=\"0\" selected> - </option>"; }
            
            if(!empty ($valorselecionado) && $valorselecionado == "=")
            { echo "<option value=\"=\" selected>IGUAL A</option>"; }
            else
            { echo "<option value=\"=\">IGUAL A</option>"; }

            if(!empty ($valorselecionado) && $valorselecionado == "ilike")
            { echo "<option value=\"ilike\" selected>CONTEM</option>"; }
            else
            { echo "<option value=\"ilike\">CONTEM</option>"; }
            
            if(!empty ($valorselecionado) && $valorselecionado == ">=")
            { echo "<option value=\">=\" selected>MAIOR OU IGUAL A</option>"; }
            else
            { echo "<option value=\">=\">MAIOR OU IGUAL A</option>"; }

            if(!empty ($valorselecionado) && $valorselecionado == "<=")
            { echo "<option value=\"<=\" selected>MENOR OU IGUAL A</option>"; }
            else
            { echo "<option value=\"<=\">MENOR OU IGUAL A</option>"; }
        }

        /**
         * Função para retorno de um Resultset a partir de uma consulta SQL
         * @param <type> $sql
         * @return <type> 
         */
        public static function CriarResultSet($sql)
        {
            $result = pg_query(conexao::Conectar(), $sql) or die("erro ao criar resultset");
            return $result;
        }

        /**
         * Função para retornar o total de registros da tabela
         * @param <type> $tabela
         * @return <type>
         */
        public static function RetornarTotalRegistros($tabela)
        {
            $obj = pg_fetch_object(TUtils::CriarResultSet("select count(*) as total from $tabela"));
            return $obj->total;
        }

        /**
         * Função para testar se o campo do formulário é um campo mapeável
         * @param <type> $key
         * @return <boolean>
         */
        public static function ECampoForm($key)
        {
            if ( (stristr(substr($key, 0, 3),"ddl")) || (stristr(substr($key, 0, 3),"txt")) || (stristr(substr($key, 0, 3),"chk")) )
            {  return true; }
            else
            { return false; }
        }
        
        public static function preencherObjeto( $objeto, $array ){
        	
        	foreach ($array as $key => $value)
            {
                $metodo = strtolower( substr($key, 3) );
            	if ( $value !== NULL ){ 
	               	$value = pg_escape_string($value);
	            	if ( TUtils::ECampoForm($key) )
	                {
	                	$objeto->$metodo = $value;
	                }
            	}
            	else {
            	    $objeto->$metodo = NULL;
            	}
            }
        	
        }

        public static function toMaiusculas( $value )
        {
            return strtr(strtoupper( $value ),"àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ","ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß");
        }
        
        /**
         * Função para retornar a data formata em dd/mm/yyyy
         * @param <type> $data
         * @return <type>
         */
        public static function FormataData($data)
        { return date('d/m/Y', strtotime($data)); }
        
    	public static function DataEnPt( $data, $hora = FALSE )
    	{
    		
    		$parte1 = $data;
    		$parte2 = '';
    		
    		if( strpos($data, '-') ) {
    			$parte1 = substr($data,0,10);
    			$arraydata = explode('-', $parte1);
    			$parte1 = $arraydata[2].'/'.$arraydata[1].'/'.$arraydata[0];
    			
    			if ( $hora ){
    				
    				$parte2 = substr( $data, 11 );
    				$arraydata = explode(':', $parte2 );
    				$parte2 = ' às ' . $arraydata[0].':'.$arraydata[1];
    				
    			}
    			
    		}
    		return $parte1.$parte2; 
    	}
        
        public static function DataPtEn($data)
    	{
    		if( strpos($data, '/') > 0 ) {
    			$arraydata = explode('/', $data);
    			$data = $arraydata[2].'-'.$arraydata[1].'-'.$arraydata[0];
    		}
    		else
    			$data = substr($data,0,10);
    		return $data; 
    	}
    	
    	public static function DecToNum( $valor ){
    		
    		if ( strstr( $valor, ',' ) ){
    		
    			if ( strstr( $valor, '.' ) )
    				$valor = str_ireplace( '.', '', $valor );
    			$valor = str_ireplace( ',', '.', $valor );
        	
    		}
        		
        	return $valor;
    		
    	}
    	
    	public static function NumToDec( $valor ){
    		
    		if ( strpos( $valor, '.' ) )
    			$valor = $valor/100;
    		return $valor;
    		
    	}
    	
    	public static function CnpjToNum( $valor ){
    		
    		$valor = str_ireplace( '.', '', $valor );
    		$valor = str_ireplace( '/', '', $valor );
    		$valor = str_ireplace( '-', '', $valor );
    		
    		return $valor;
    		
    	}
    	
    	public static function NumToCnpj( $valor ){
    		
    		return  substr($valor,0,2).".".substr($valor,2,3).".".substr($valor,5,3)."/".substr($valor,8,4)."-".substr($valor,12,2);
    		    		
    		    		
    	}
    	
    	public static function CepToNum( $valor ){
    		
    		$valor = str_ireplace( '-', '', $valor );
    		
    		return $valor;
    		
    	}
    	
    	public static function PerToNum( $valor ){
    		
    	    if ( strstr( $valor, ',' ) ){
    		
    			if ( strstr( $valor, '.' ) )
    				$valor = str_ireplace( '.', '', $valor );
    			$valor = str_ireplace( ',', '.', $valor );
        	
    		}
        	
        	return $valor;
    		
    	}
    	
    	
    	public static function CpfToNum( $valor ){
    		
    		$valor = str_ireplace( '.', '', $valor );
    		$valor = str_ireplace( '-', '', $valor );
        	
        	return $valor;
    		
    	}
    	
    	public static function NumToCpf( $valor )
    	{
    	    if ( strlen( $valor ) == 11 ){
    		    return substr($valor, 0, 3) . '.' . substr($valor, 3, 3) . '.' . substr($valor, 6, 3) . '-' . substr($valor, 9 );
    	    }
    	    return $valor;
    	}
    	
    	public static function is_date( $valor ){
    		
    		return ( self::is_date_EN( $valor ) or self::is_date_PT( $valor ) );   		
    		
    	}
    	
    	public static function is_date_EN($valor)
    	{
    	    $valor = substr( $valor, 0, 10 );
    	    
    		if ( strlen ( $valor ) != 10 )
    			return false;
    		
    		$dia = substr ( $valor, 8, 2 );
    		$mes = substr ( $valor, 5, 2 );
    		$ano = substr ( $valor, 0, 4 );
    		
    		if ( !is_numeric($dia) || !is_numeric($mes) || !is_numeric($ano) )
    			return false;
    		
    		return checkdate( $mes, $dia, $ano );
    	}
    	
    	public static function is_date_PT($valor)
    	{
    	    $valor = substr( $valor, 0, 10 );
    	    
    		if ( strlen ( $valor ) != 10 )
    			return false;
    		
    		$dia = substr ( $valor, 0, 2 );
    		$mes = substr ( $valor, 3, 2 );
    		$ano = substr ( $valor, 6, 4 );
    		    		
    		if ( !is_numeric($dia) || !is_numeric($mes) || !is_numeric($ano) )
    			return false;
    		
    		return checkdate( $mes, $dia, $ano );
    	}
    	
        public static function CpfValidacao($cpf)
        {
    		if (!preg_match('|^(\d{3})\.?(\d{3})\.?(\d{3})\-?(\d{2})$|', $cpf, $matches))
    		return FALSE;
    		
        	array_shift($matches);
        	$cpf = implode('', $matches);
        		
        	if ($cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999')
        		return false;
        		
        	for ($t=9; $t < 11; $t++) {
        		for ($d=0, $c=0; $c < $t; $c++)
        			$d += $cpf[$c] * ($t + 1 - $c);
        
        		$d = ((10 * $d) % 11) % 10;
        
        		if ($cpf[$c] != $d)
        			return FALSE;
        	}
        	
        	return TRUE;	
            
			/*if (strlen($cpf) <> 11)
				return false;
			if(!is_numeric($cpf)) 
				return false;
				
  			if( ($cpf == '00000000000') || ($cpf == '11111111111') || ($cpf == '22222222222') || ($cpf == '33333333333') || 
  			    ($cpf == '44444444444') || ($cpf == '55555555555') || ($cpf == '66666666666') ||
  			    ($cpf == '77777777777') || ($cpf == '88888888888') ||($cpf == '99999999999') )
  			   		return false;
  			   									      												
			// Verifica 1º digito
			$soma = 0;
			for ($i = 0; $i < 9; $i++)    
			   $soma += (($i+1) * $cpf[$i]);
						
			$d1 = ($soma % 11);
			
			if ($d1 == 10) 
				$d1 = 0;
								
			// Verifica 2º digito
			$soma = 0;
			for ($i = 9, $j = 0; $i > 0; $i--, $j++) 
			   $soma += ($i * $cpf[$j]);
						
			$d2 = ($soma % 11);
			
			if ($d2 == 10) 
				$d2 = 0;
						
			if ($d1 == $cpf[9] && $d2 == $cpf[10]) 
			   return true;
			else 
			   return false;*/
							
		}  			
		
		
		public static function CnpjValidacao($cnpj){
			if (strlen($cnpj) <> 14)
         		return false;
			$soma = 0;
			$soma += ($cnpj[0] * 5);
			$soma += ($cnpj[1] * 4);
			$soma += ($cnpj[2] * 3);
			$soma += ($cnpj[3] * 2);
			$soma += ($cnpj[4] * 9);
			$soma += ($cnpj[5] * 8);
			$soma += ($cnpj[6] * 7);
			$soma += ($cnpj[7] * 6);
			$soma += ($cnpj[8] * 5);
			$soma += ($cnpj[9] * 4);
			$soma += ($cnpj[10] * 3);
			$soma += ($cnpj[11] * 2);
			
			$d1 = $soma % 11;
			$d1 = $d1 < 2 ? 0 : 11 - $d1;
			
			$soma = 0;
			$soma += ($cnpj[0] * 6);
			$soma += ($cnpj[1] * 5);
			$soma += ($cnpj[2] * 4);
			$soma += ($cnpj[3] * 3);
			$soma += ($cnpj[4] * 2);
			$soma += ($cnpj[5] * 9);
			$soma += ($cnpj[6] * 8);
			$soma += ($cnpj[7] * 7);
			$soma += ($cnpj[8] * 6);
			$soma += ($cnpj[9] * 5);
			$soma += ($cnpj[10] * 4);
			$soma += ($cnpj[11] * 3);
			$soma += ($cnpj[12] * 2);
			
			
			$d2 = $soma % 11;
			$d2 = $d2 < 2 ? 0 : 11 - $d2;
			
			if ($cnpj[12] == $d1 && $cnpj[13] == $d2) {
			   return true;
			}
			else {
			   return false;
			}
			
		}
    	
		public static function FoneToNum( $valor ){
			
			$valor = str_ireplace( '(', '', $valor );
    		$valor = str_ireplace( ')', '', $valor );
    		$valor = str_ireplace( ' ', '', $valor );
    		$valor = str_ireplace( '-', '', $valor );
        	
        	return $valor;
			
		}
		
		public static function NumToFone( $valor ){
			
			# Fone no Formato 8588888888
			if ( strlen( $valor ) === 10 ){
				$codigoArea = '(' . substr($valor, 0, 2) . ') ';
				$valor = substr( $valor, 2 );
			}
			else
				$codigoArea = '';
				
			return $codigoArea . substr( $valor, 0, 4 ) . '-' . substr( $valor, 4, 4 );
				
		}
		
        public static function verificarValidade( $data, $dataParaComparar = NULL )
        {
            $dataValidade = strtotime( $data );
            if ( $dataParaComparar == NULL ) {
                $dataParaComparar = strtotime( date( 'Y-m-d' ) );
            }
            if ( $dataValidade < $dataParaComparar ){
                return FALSE;
            }    
            
            return TRUE;
        }
        
        public static function reduzirString( $string, $size = '30' )
        {
            $tamanhoDaString = strlen( $string );
            if ( $tamanhoDaString <= $size ){
                return $string;
            }
            return substr( $string, 0, $size - 3 ) . '...';
        }

        /*
         * metodo nao implementado corretamente
        public static function RetornarArrayFormPost()
        {
            foreach ($_POST as $key => $value){
                if ( (stristr(substr($key, 0, 3),"ddl")) || (stristr(substr($key, 0, 3),"txt")) || (stristr(substr($key, 0, 3),"chk")) )
                {
                    $var = strtolower(substr($key, 3));
                    $obj[$var] = $value;
                }
            }
            return $obj;
        }
        */
        
        /**
         * Converte um numero para valores em Reais.
         * @param $num
         * @param $flag Quando TRUE insere 'R$' no inicio do numero.Default FALSE
         * @return string
         */
        public static function NumToMoney($num,$flag = FALSE){
            $result = number_format($num, 2, ',', '.');
            if ($flag){
                $result = 'R$ ' . $result;
            }
            return $result;
        }
        
        public static function arrayToSql($array) 
        {
            $string = '';
            if (is_array($array)) {
                foreach ($array as $a) {
                    $string .= ',' . $a;
                }
                $string = substr($string, 1);
            }
            return $string;
        }

    }
?>